namespace ClassicBehaviorTree
{
    public enum NodeState
    {
        /// <summary>
        /// to be start
        /// </summary>
        Ready,
        /// <summary>
        /// get the result
        /// </summary>
        Success,
        /// <summary>
        /// get the result
        /// </summary>
        Failure,
        /// <summary>
        /// give up
        /// </summary>
        Abort,
    }

    public enum NodeType
    {
        TaskNode,
        ConditionNode,
        TimerNode,
        TriggerRepeater,
        SimpleRepeater,
        Selector,
        Sequencer,
        TaskParallelizer,
    }

    public enum TaskPattern
    {
        /// <summary>
        /// just once
        /// </summary>
        Normal,
        /// <summary>
        /// stop the system
        /// </summary>
        Abort,
    }

    public enum ConditionPattern
    {
        /// <summary>
        /// continously report
        /// </summary>
        Watcher,
        /// <summary>
        /// report current result then shut down
        /// </summary>
        CheckOnce,
        /// <summary>
        /// report the success result then shut down
        /// </summary>
        PositiveTrigger,
        /// <summary>
        /// report the failure result then shut down
        /// </summary>
        NegativeTrigger,
    }
    public enum TimerPattern
    {
        /// <summary>
        /// success while in the effect time
        /// </summary>
        While,
        /// <summary>
        /// success once the time run out
        /// </summary>
        Until,
    }

    public interface INodeFunction
    {
        public bool Condition();
        public void ResetCondition();
        public void Action();
    }
    public interface ISetNodeFunction
    {
        public void SetNodeFunction(INodeFunction INodeFunction);
    }

}
